const webpack = require("webpack");

console.log("######## webpack开始打包 ##########");
const isProd = process.env.NODE_ENV == "production";
const mode = isProd ? 'production' : 'development';
console.log("打包模式：", process.env.NODE_ENV);

const rules = [];
if (isProd) {
  rules.push({
    test: /\.js$/,
    use: {
      loader: "babel-loader", //把es6 -> es5
      options: {
        presets: [["@babel/preset-env"]],
        plugins: [
          // ["@babel/plugin-proposal-decorators", { legacy: true }], // 装饰器语法支持
          ["@babel/plugin-transform-runtime", { corejs: 3 }], //统一引入helper避免代码冗余，使得polyfill避免原型污染
        ],
      },
    },
    exclude: /node_modules/,
  });
}

module.exports = {
  devtool: "none",
  mode,
  module: {
    rules: [
      ...rules,
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
  performance: {
    hints: "warning", // 枚举
    maxAssetSize: 500 * 1024, // 整数类型（以字节为单位）
    maxEntrypointSize: 500000, // 整数类型（以字节为单位）
    assetFilter: function (assetFilename) {
      // 提供资源文件名的断言函数
      // 只给出js与css文件的性能提示
      return assetFilename.endsWith(".css") || assetFilename.endsWith(".js");
    },
  },

  optimization: {},

  plugins: [
    new webpack.DefinePlugin({
      API_PROXY: JSON.stringify(process.env.NODE_ENV == 'test'),
    }),
  ],
};
